home *** CD-ROM | disk | FTP | other *** search
Wrap
(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=Tiziano Mⁿller Title=dvd-inside Description=dvd-inside (DE/CH) import Site=www.dvd-inside.de Language=DE Version=0.2 - 16.January 2005 Requires=3.5.0 Comments= DVD-Inside (www.dvd-inside.de)| v0.1 - 2. Week 2005: "From scratch"| v0.2 - 16.January 2005: "Rewritten"| This script is based on the IMDB-script.| So, credits go to the authors of the IMDB-script. License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. | GetInfo=1 [Options] ***************************************************) program dvd_inside; const CRLF = #13#10; var MovieName: string; MovieURL: string; function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(Pattern, List.GetString(i)) <> 0 then begin result := i; Break; end; end; function MyTrim(str_: string): string; var chars: array of char; StrLen, i, LastSpacePos: integer; begin result := ''; str_ := StringReplace(str_, #9, ''); str_ := StringReplace(str_, #10, ''); str_ := StringReplace(str_, #13, ''); while Pos(' ', str_) = 1 do begin Delete(str_, Pos(' ', str_), 1); end; StrLen := Length(str_); SetArrayLength(chars, StrLen); for i := 0 to StrLen-1 do begin chars[i] := Copy(str_,i+1,1); end; str_ := ''; LastSpacePos := StrLen - 1; if LastSpacePos > -1 then begin while chars[LastSpacePos] = ' ' do begin LastSpacePos := LastSpacePos - 1; end; for i:= 0 to LastSpacePos do begin str_ := str_ + chars[i]; end; end; str_ := StringReplace(str_, ' ', ' '); while result <> str_ do begin result := str_; str_ := StringReplace(str_, ' ', ' '); end; result := StringReplace(result, ' ,', ','); end; procedure CutAfter(var str_: string; Pattern: string); begin str_ := Copy(str_, Pos(Pattern, str_) + Length(Pattern), Length(str_)); end; procedure CutBefore(var Str: string; Pattern: string); begin Str := Copy(Str, Pos(Pattern, Str), Length(Str)); end; function GetStringBetween(str_, StartTag, EndTag: string): string; var BeginPos, EndPos: integer; begin result := ''; if EndTag = '' then begin EndPos := Length(str_); end else EndPos := Pos(EndTag, str_); BeginPos := Pos(StartTag, str_) + Length(StartTag); if StartTag = '' then BeginPos := 1; if BeginPos > 0 then result := Copy(str_, BeginPos, EndPos - BeginPos); end; function GetTrimmedStringBetween(str_, StartTag, EndTag: string): string; begin result := MyTrim(GetStringBetween(str_, StartTag, EndTag)); end; // Extracts single movie detail (like director, genre) from page function GetStringFromHTML(Page, StartTag, CutTag, EndTag: string): string; begin Result := ''; // recognition tag - if present, extract detail from page, otherwise assume detail is not present if Pos(StartTag, Page) > 0 then begin CutBefore(Page, StartTag); // optional cut tag helps finding right string in html page if Length(CutTag) > 0 then CutAfter(Page, CutTag); // movie detail copied with html tags up to end string Result := Copy(Page, 0, Pos(EndTag, Page) - 1); // remove html tags and decode html string // HTMLRemoveTags(Result); HTMLDecode(Result); end; end; function StripHTMLTags(str_: string): string; var temp_char : char; StrLen, i, CharPos : integer; DoCopy : boolean; begin DoCopy := true; CharPos := 0; result := ''; StrLen := Length(str_); for i := 1 to StrLen do begin temp_char := Copy(str_,i,1); if temp_char = '<' then begin DoCopy := false; continue; end else if temp_char = '>' then begin DoCopy := true; continue; end else begin if DoCopy then begin result := result + temp_char; end; end; end; end; procedure AnalyzeIndexPage(Address, Params: string); var IndexPage: TStringList; Page: string; begin IndexPage := TStringList.Create; Address := URLEncode(Address); Params := URLEncode(Params); IndexPage.Text := PostPage(Address,Params); PickTreeClear; PickTreeAdd('Search results', ''); AddMoviesTitles(IndexPage); if PickTreeExec(Address) then begin Page := GetPage(Address); AnalyzeMoviePage(Page, Address); end; IndexPage.Free; end; procedure AnalyzeMoviePage(Page,Address: string); var StrPosition: Integer; StrTemp: string; OriginalTitle, Country, Year, Genre, Studio, Region, EAN_Number, Distributor, AFK, Duration: string; VideoFormat, ScreenFormat, ScreenSystem, Language, AudioFormat, Subtitle, MediaType, Disks: string; Comments, Bonusmaterial, Packaging, TranslatedTitle, Director, Cast, Producer, Description: string; Music, Screenplay: string; begin // Initializing the very important Comments Comments := ''; // URL SetField(fieldURL, Address); // Translated title TranslatedTitle := MyTrim(GetStringFromHTML(Page,'<b class="ueberschrift">','">','</b>')); SetField(fieldTranslatedTitle, TranslatedTitle); // Original-Title, Country and Year StrTemp := MyTrim(GetStringFromHTML(Page, 'Originaltitel:','<td>','</td>')); StrTemp := StripHTMLTags(StrTemp); OriginalTitle := GetTrimmedStringBetween(StrTemp,'','('); StrTemp := GetTrimmedStringBetween(StrTemp,'(',')'); Country := Copy(StrTemp,1,Length(StrTemp)-4); Year := Copy(StrTemp,Length(StrTemp)-4,Length(StrTemp)); SetField(fieldOriginalTitle, OriginalTitle); SetField(fieldCountry, Country); SetField(fieldYear, Year); // EAN-Number EAN_Number := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'EAN-Nummer:','<td>', '</td>'))); Comments := Comments + 'EAN-Nummer: ' + EAN_Number + CRLF; // Genre Genre := ''; Genre := MyTrim(GetStringFromHTML(Page, 'Genre:', '<td>', '</td>')); Genre := MyTrim(StripHTMLTags(Genre)); setField(fieldCategory, Genre); // Studio Studio := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Studio:','</td>', '</tr>'))); Comments := Comments + 'Studio: ' + Studio + CRLF; // Distributor Distributor := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Vertrieb:','</td>', '</tr>'))); Comments := Comments + 'Vertrieb: ' + Distributor + CRLF; // Altersfreigabe AFK := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Altersfreigabe:','</td>', '</tr>'))); Comments := Comments + 'Altersfreigabe: ' + AFK + CRLF; // CountryCode Region := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Ländercode:','</td>', '</tr>'))); VideoFormat := 'DVD Zone '+Region; setField(fieldVideoFormat,VideoFormat); // Duration Duration := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Filmlänge:','</td>', '</tr>'))); Duration := StringReplace(Duration,' min',''); setField(fieldLength,Duration); // Description Description := GetStringFromHTML(Page, 'Inhalt:','</td>', '</tr>'); Description := StringReplace(Description, '<br />','*'); Description := MyTrim(StripHTMLTags(Description)); Description := StringReplace(Description, '*',CRLF); setField(fieldDescription,Description); // Actors Cast := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Schauspieler:','</td>', '</tr>'))); setField(fieldActors,Cast); // Director Director := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Regie:','</td>', '</tr>'))); setField(fieldDirector,Director); // Production Producer := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Produzent:','</td>', '</tr>'))); setField(fieldProducer,Producer); // Music Music := ''; Music := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Music:','</td>', '</tr>'))); Comments := Comments + 'Musik: ' + Music + CRLF; // Screenplay Screenplay := ''; Screenplay := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Drehbuch:','</td>', '</tr>'))); Comments := Comments + 'Drehbuch: ' + Screenplay + CRLF; // Screen format & system ScreenFormat := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Format:','</td>', '</tr>'))); ScreenSystem := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'System:','</td>', '</tr>'))); setField(fieldResolution,ScreenSystem + ' - ' + ScreenFormat); // Audioformat/Language AudioFormat := ''; Language := ''; StrTemp := GetStringFromHTML(Page, 'Tonformate / Sprachen:', '</td>', '</td>'); StrTemp := StringReplace(StrTemp, '<br />','*') + '*'; StrTemp := MyTrim(StripHTMLTags(StrTemp)); while Pos('*',StrTemp) > 0 do begin AudioFormat := AudioFormat + ', ' + MyTrim(Copy(StrTemp,1,Pos(' in ',StrTemp))); Language := Language + ', ' + MyTrim(Copy(StrTemp,Pos(' in ',StrTemp)+4,Pos('*',StrTemp)-(Pos(' in ',StrTemp)+4))); CutAfter(StrTemp,'*'); end; AudioFormat := Copy(AudioFormat,3,Length(AudioFormat)); Language := Copy(Language,3,Length(Language)); setField(fieldAudioFormat, AudioFormat); setField(fieldLanguages, Language); // Subtitles Subtitle := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Untertitel:', '</td>', '</tr>'))); if Subtitle = 'Keine Untertitel' then Subtitle := ''; setField(fieldSubtitles, Subtitle); // Mediatype MediaType := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medientyp:','</td>', '</tr>'))); setField(fieldMediaType, MediaType); // Disks Disks := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Medienanzahl:','</td>', '</tr>'))); setField(fieldDisks, Disks); // Package Packaging := MyTrim(StripHTMLTags(GetStringFromHTML(Page, 'Verpackung:', '</td>', '</tr>'))); Comments := Comments + 'Verpackung: ' + Packaging + CRLF; // Bonusmaterial Bonusmaterial := MyTrim(GetStringFromHTML(Page, 'Bonus-Matrial:', '</td>', '</tr>')); Bonusmaterial := StringReplace(Bonusmaterial,'<br />','*'); Bonusmaterial := MyTrim(StripHTMLTags(Bonusmaterial)); Bonusmaterial := StringReplace(Bonusmaterial,'*',CRLF); Comments := Comments + CRLF + 'Bonusmaterial' + CRLF + '===========' + CRLF + Bonusmaterial + CRLF; setField(fieldComments,Comments); //DisplayResults; end; procedure AddMoviesTitles(ResultsPage: TStringList); var Page: string; MovieTitle, MovieAddress: String; begin Page := ResultsPage.Text; while Pos('details.php', Page) > 0 do begin CutBefore(Page, 'details.php'); MovieAddress := 'http://www.dvd-inside.de/db/' + GetStringFromHTML(Page, 'details.php', '', '"'); MovieTitle := MyTrim(GetStringFromHTML(Page, 'details.php', '">', '</tr>')); MovieTitle := StringReplace(MovieTitle, '</td>', ' | '); MovieTitle := MyTrim(StripHTMLTags(MovieTitle)); CutAfter(Page, '</tr>'); PickTreeAdd(MovieTitle, MovieAddress); end; end; begin if CheckVersion(3,5,0) then begin MovieName := GetField(fieldOriginalTitle); if MovieName = '' then MovieName := GetField(fieldTranslatedTitle); if Input('dvd-inside import', 'Enter the title of the movie:', MovieName) then begin AnalyzeIndexPage('http://www.dvd-inside.de/db/search.php', 'action=new&title='+MovieName+'&suchen=Suchen'); end; end else ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)'); end.